/**
 * @Company:中享思途   
 * @Title:ProductServiceImpl.java 
 * @Author:IL Clown   
 * @Date:2020年8月20日 下午5:13:03     
 */
package com.situ.shopsystem.service.Impl;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.situ.shopsystem.dao.ProductDao;
import com.situ.shopsystem.pojo.LayuiResult;
import com.situ.shopsystem.pojo.Product;
import com.situ.shopsystem.pojo.User;
import com.situ.shopsystem.service.ProductService;

/** 
 * @ClassName:ProductServiceImpl 
 * @Description:(这里用一句话描述这个类的作用)  
 */
@Service
public class ProductServiceImpl implements ProductService {
	@Autowired
	private ProductDao productDao;

	/** 
	 * @Title: save 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param product
	 * @return  
	 */
	@Override
	public int save(Product product, HttpSession session) {
		User user = (User) session.getAttribute("loginUser");
		product.setCreater(user.getRowId());
		product.setCreateTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
		product.setActiveFlag(1);
		//是否上架
		if (product.getProOn() == null) {
			product.setProOn(0);
		}
		return productDao.save(product);
	}

	/** 
	 * @Title: delete 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param rowId
	 * @return  
	 */
	@Override
	public int delete(Long rowId) {
		return productDao.delete(rowId);
	}

	/** 
	 * @Title: upodate 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param product
	 * @return  
	 */
	@Override
	public int update(Product product, HttpSession session) {
		User user = (User) session.getAttribute("loginUser");
		Product product2 = productDao.findOne(product.getRowId());
		//产品的简介
		product2.setInfo(product.getInfo());
		//产品的数量
		product2.setProNumber(product.getProNumber());
		//产品的名称
		product2.setProName(product.getProName());
		//产品的价格
		product2.setProPrice(product.getProPrice());
		//产品的图片
		product2.setProPhoto(product.getProPhoto());
		//更新人
		product2.setUpdateBy(product.getRowId());
		//更新时间
		product2.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()));
		//产品是否上架判断
		if (product.getProOn() == null) {
			product.setProOn(0);
		}
		return productDao.update(product2);
	}

	/** 
	 * @Title: findOne 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param rowId
	 * @return  
	 */
	@Override
	public Product findOne(Long rowId) {
		return productDao.findOne(rowId);
	}

	/** 
	 * @Title: uploadFile 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param multipartFile
	 * @param realPath
	 * @return  
	 */
	@Override
	public String uploadFile(MultipartFile multipartFile, String realPath) {
		//拿文件名
		String fileName = multipartFile.getOriginalFilename();
		//拿.后缀
		String suffix = fileName.substring(fileName.lastIndexOf("."));
		//拼接相对路径
		StringBuffer buffer = new StringBuffer("upload/");
		buffer.append(Calendar.getInstance().getTimeInMillis()).append(suffix);
		//拼接成服务器存储的路径
		String filePath = realPath + buffer.toString();
		try {
			//
			multipartFile.transferTo(new File(filePath));
		} catch (IllegalStateException | IOException e) {
			e.printStackTrace();
		}

		return buffer.toString();
	}

	/** 
	 * @Title: changeState 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @param catalogId  
	 */
	@Override
	public void changeState(Long rowId) {
		Product product = productDao.findOne(rowId);
		Integer id = product.getProOn();
		if (id == 0) {
			product.setProOn(1);
		} else {
			product.setProOn(0);
		}
		productDao.update(product);

	}

	/** 
	 * @Title: findAll 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @return  
	 */
	@Override
	public LayuiResult findAll(Integer page, Integer limit, Product product) {

		LayuiResult layuiResult = new LayuiResult();
		layuiResult.setCode(0);
		layuiResult.setCount(productDao.count());
		layuiResult.setData(productDao.findAll((page - 1) * limit, limit, product));
		return layuiResult;
	}

	/** 
	 * @Title: findAllBy 
	 * @Description:(这里用一句话描述这个方法的作用)
	 * @return  
	 */
	@Override
	public List<Product> findAllBy() {
		return productDao.findAllBy();
	}

}
